// 测试化学方程式解析和平衡功能

import { ChemicalParser, FormulaBuilder } from './parser'
import { Equation } from './equation'

// 测试基础分子式构建
export function testBasicFormulas() {
  console.log('=== 测试基础分子式构建 ===')
  
  // 测试 H2O
  const water = FormulaBuilder.buildH2O()
  console.log('H2O:', water.getString())
  console.log('H2O 中的元素:', water.getElements())
  console.log('H2O 中 H 的数量:', water.getElementCount('H'))
  console.log('H2O 中 O 的数量:', water.getElementCount('O'))
  
  // 测试 H2SO4
  const sulfuricAcid = FormulaBuilder.buildH2SO4()
  console.log('H2SO4:', sulfuricAcid.getString())
  console.log('H2SO4 中的元素:', sulfuricAcid.getElements())
  console.log('H2SO4 中 H 的数量:', sulfuricAcid.getElementCount('H'))
  console.log('H2SO4 中 S 的数量:', sulfuricAcid.getElementCount('S'))
  console.log('H2SO4 中 O 的数量:', sulfuricAcid.getElementCount('O'))
}

// 测试分子式解析
export function testFormulaParser() {
  console.log('\n=== 测试分子式解析 ===')
  
  const testFormulas = [
    'H2O',
    'H2SO4', 
    'Fe2O3',
    'Ca(OH)2',
    'Al2(SO4)3',
    'Fe2(SO4)3'
  ]
  
  testFormulas.forEach(formulaStr => {
    const formula = ChemicalParser.parseFormula(formulaStr)
    if (formula) {
      console.log(`${formulaStr}:`, formula.getString())
      console.log(`  元素:`, formula.getElements())
      
      formula.getElements().forEach(element => {
        console.log(`  ${element}: ${formula.getElementCount(element)}`)
      })
    } else {
      console.log(`解析失败: ${formulaStr}`)
    }
    console.log('---')
  })
}

// 测试方程式解析
export function testEquationParser() {
  console.log('\n=== 测试方程式解析 ===')
  
  const testEquations = [
    'H2 + O2 = H2O',
    'Fe2O3 + H2SO4 = Fe2(SO4)3 + H2O',
    'C2H6 + O2 = CO2 + H2O',
    'HCl + NaOH = NaCl + H2O'
  ]
  
  testEquations.forEach(equationStr => {
    console.log(`解析方程式: ${equationStr}`)
    const equation = ChemicalParser.parseEquation(equationStr)
    
    if (equation) {
      console.log('解析成功')
      console.log('原始:', equation.print())
      
      // 尝试平衡
      const result = equation.getBalanceResult()
      console.log('平衡结果:', result.success ? '成功' : '失败')
      
      if (result.success) {
        console.log('配平后:', result.equation)
      } else {
        console.log('失败原因:', result.message)
      }
    } else {
      console.log('解析失败')
    }
    console.log('---')
  })
}

// 运行所有测试
export function runAllTests() {
  try {
    testBasicFormulas()
    testFormulaParser()
    testEquationParser()
    console.log('\n✅ 所有测试完成')
  } catch (error) {
    console.error('❌ 测试过程中出现错误:', error)
  }
}

// 导出测试方法以便在页面中调用
export const ChemistryTest = {
  testBasicFormulas,
  testFormulaParser,
  testEquationParser,
  runAllTests
}